﻿
namespace BuildARoute.Web.Models
{
    using System;
    using System.ComponentModel.DataAnnotations;
    using System.Data.Objects.DataClasses;
    using System.ServiceModel.DomainServices.Server;


    // The MetadataTypeAttribute identifies LanguageMetadata as the class
    // that carries additional metadata for the Language class.
    [MetadataTypeAttribute(typeof(Language.LanguageMetadata))]
    public partial class Language
    {

        // This class allows you to attach custom attributes to properties
        // of the Language class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class LanguageMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private LanguageMetadata()
            {
            }

            public string LanguageID { get; set; }

            public string Name { get; set; }

            public EntityCollection<POI> POIs { get; set; }

            public EntityCollection<Stop> Stops { get; set; }

            public EntityCollection<Tour> Tours { get; set; }

            public EntityCollection<Translation> Translations { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies POIMetadata as the class
    // that carries additional metadata for the POI class.
    [MetadataTypeAttribute(typeof(POI.POIMetadata))]
    public partial class POI
    {

        // This class allows you to attach custom attributes to properties
        // of the POI class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class POIMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private POIMetadata()
            {
            }

            public string Author { get; set; }

            public DateTime DateCreated { get; set; }

            public string Language { get; set; }

            public Language Language1 { get; set; }

            public DateTime LastEdit { get; set; }

            public string LongDescription { get; set; }

            public Guid POIID { get; set; }

            public EntityCollection<POIImage> POIImages { get; set; }

            public EntityCollection<POITag> POITags { get; set; }

            public string ShortDescription { get; set; }


            public EntityCollection<StopPOI> StopPOIs { get; set; }

            public string Title { get; set; }


            public EntityCollection<TourPOI> TourPOIs { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies POIImageMetadata as the class
    // that carries additional metadata for the POIImage class.
    [MetadataTypeAttribute(typeof(POIImage.POIImageMetadata))]
    public partial class POIImage
    {

        // This class allows you to attach custom attributes to properties
        // of the POIImage class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class POIImageMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private POIImageMetadata()
            {
            }

            public string Copyright { get; set; }

            public string Description { get; set; }

            public string ImageURI { get; set; }

            public POI POI { get; set; }

            public Guid POIID { get; set; }

            public string Title { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies POITagMetadata as the class
    // that carries additional metadata for the POITag class.
    [MetadataTypeAttribute(typeof(POITag.POITagMetadata))]
    public partial class POITag
    {

        // This class allows you to attach custom attributes to properties
        // of the POITag class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class POITagMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private POITagMetadata()
            {
            }

            public bool OriginalAssociation { get; set; }

            public POI POI { get; set; }

            public Guid POIID { get; set; }

            public Tag Tag { get; set; }

            public Guid TagID { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies SocialInputMetadata as the class
    // that carries additional metadata for the SocialInput class.
    [MetadataTypeAttribute(typeof(SocialInput.SocialInputMetadata))]
    public partial class SocialInput
    {

        // This class allows you to attach custom attributes to properties
        // of the SocialInput class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class SocialInputMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private SocialInputMetadata()
            {
            }

            public Guid ID { get; set; }

            public Nullable<bool> LikeBit { get; set; }

            public Guid PlaceID { get; set; }

            public Nullable<double> Rating { get; set; }

            public string Review { get; set; }

            public User User { get; set; }

            public Guid UserID { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies StopMetadata as the class
    // that carries additional metadata for the Stop class.
    [MetadataTypeAttribute(typeof(Stop.StopMetadata))]
    public partial class Stop
    {

        // This class allows you to attach custom attributes to properties
        // of the Stop class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class StopMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private StopMetadata()
            {
            }

            public string Author { get; set; }

            public DateTime DateCreated { get; set; }

            public Nullable<double> Duration { get; set; }

            public string Language { get; set; }

            public Language Language1 { get; set; }

            public DateTime LastEdit { get; set; }

            public string LongDescription { get; set; }

            public string ShortDescription { get; set; }

            public Guid StopID { get; set; }

            public EntityCollection<StopPOI> StopPOIs { get; set; }

            public string Title { get; set; }

            [Include]
            [Association("StopTourStop","StopID","StopID")]
            public EntityCollection<TourStop> TourStops { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies StopPOIMetadata as the class
    // that carries additional metadata for the StopPOI class.
    [MetadataTypeAttribute(typeof(StopPOI.StopPOIMetadata))]
    public partial class StopPOI
    {

        // This class allows you to attach custom attributes to properties
        // of the StopPOI class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class StopPOIMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private StopPOIMetadata()
            {
            }

            public bool OriginalAssociation { get; set; }

            public POI POI { get; set; }

            public Guid POIID { get; set; }

            public Stop Stop { get; set; }

            public Guid StopID { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies TagMetadata as the class
    // that carries additional metadata for the Tag class.
    [MetadataTypeAttribute(typeof(Tag.TagMetadata))]
    public partial class Tag
    {

        // This class allows you to attach custom attributes to properties
        // of the Tag class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class TagMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private TagMetadata()
            {
            }

            public EntityCollection<POITag> POITags { get; set; }

            public Guid TagID { get; set; }

            public string Text { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies TourMetadata as the class
    // that carries additional metadata for the Tour class.
    [MetadataTypeAttribute(typeof(Tour.TourMetadata))]
    public partial class Tour
    {

        // This class allows you to attach custom attributes to properties
        // of the Tour class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class TourMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private TourMetadata()
            {
            }

            public string Author { get; set; }

            public DateTime DateCreated { get; set; }

            public string ImageURI { get; set; }

            public string Language { get; set; }

            public Language Language1 { get; set; }

            public DateTime LastEdit { get; set; }

            public string LongDescription { get; set; }

            public string ShortDescription { get; set; }

            public string Title { get; set; }

            public Guid TourID { get; set; }

            public EntityCollection<TourPOI> TourPOIs { get; set; }

            [Include]
            [Association("TourTourStop","TourID","TourID")]
            public EntityCollection<TourStop> TourStops { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies TourPOIMetadata as the class
    // that carries additional metadata for the TourPOI class.
    [MetadataTypeAttribute(typeof(TourPOI.TourPOIMetadata))]
    public partial class TourPOI
    {

        // This class allows you to attach custom attributes to properties
        // of the TourPOI class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class TourPOIMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private TourPOIMetadata()
            {
            }

            public Nullable<bool> OriginalAssociation { get; set; }

            public POI POI { get; set; }

            public Guid POIID { get; set; }

            public Tour Tour { get; set; }

            public Guid TourID { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies TourStopMetadata as the class
    // that carries additional metadata for the TourStop class.
    [MetadataTypeAttribute(typeof(TourStop.TourStopMetadata))]
    public partial class TourStop
    {

        // This class allows you to attach custom attributes to properties
        // of the TourStop class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class TourStopMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private TourStopMetadata()
            {
            }

            public bool OriginalAssociation { get; set; }
            
            [Include]
            [Association("TourStopStop","StopID","StopID")]
            public Stop Stop { get; set; }

            public Guid StopID { get; set; }

            [Include]
            [Association("TourStopTour","TourID","TourID")]
            public Tour Tour { get; set; }

            public Guid TourID { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies TranslationMetadata as the class
    // that carries additional metadata for the Translation class.
    [MetadataTypeAttribute(typeof(Translation.TranslationMetadata))]
    public partial class Translation
    {

        // This class allows you to attach custom attributes to properties
        // of the Translation class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class TranslationMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private TranslationMetadata()
            {
            }

            public string Field { get; set; }

            public string Language { get; set; }

            public Language Language1 { get; set; }

            public Guid PlaceID { get; set; }

            public string Text { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies UserMetadata as the class
    // that carries additional metadata for the User class.
    [MetadataTypeAttribute(typeof(User.UserMetadata))]
    public partial class User
    {

        // This class allows you to attach custom attributes to properties
        // of the User class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class UserMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private UserMetadata()
            {
            }

            public DateTime Created { get; set; }

            public string LastActivityDuration { get; set; }

            public string LastKnownLocation { get; set; }

            public DateTime LastTimeActive { get; set; }

            public string Name { get; set; }

            public EntityCollection<SocialInput> SocialInputs { get; set; }

            public Guid UserID { get; set; }

            public EntityCollection<UserVisited> UserVisiteds { get; set; }
        }
    }

    // The MetadataTypeAttribute identifies UserVisitedMetadata as the class
    // that carries additional metadata for the UserVisited class.
    [MetadataTypeAttribute(typeof(UserVisited.UserVisitedMetadata))]
    public partial class UserVisited
    {

        // This class allows you to attach custom attributes to properties
        // of the UserVisited class.
        //
        // For example, the following marks the Xyz property as a
        // required property and specifies the format for valid values:
        //    [Required]
        //    [RegularExpression("[A-Z][A-Za-z0-9]*")]
        //    [StringLength(32)]
        //    public string Xyz { get; set; }
        internal sealed class UserVisitedMetadata
        {

            // Metadata classes are not meant to be instantiated.
            private UserVisitedMetadata()
            {
            }

            public Guid PlaceID { get; set; }

            public User User { get; set; }

            public Guid UserID { get; set; }
        }
    }
}
